package J3_23;

import java.util.*;

public class test {

    //给你一个正整数 n ，开始时，它放在桌面上。在 109 天内，每天都要执行下述步骤：
    //
    //对于出现在桌面上的每个数字 x ，找出符合 1 <= i <= n 且满足 x % i == 1 的所有数字 i 。
    //然后，将这些数字放在桌面上。
    //返回在 109 天之后，出现在桌面上的 不同 整数的数目。
    public int distinctIntegers(int n) {
        return n>1?n-1:1;
    }


    //请你来实现一个 myAtoi(string s) 函数，使其能将字符串转换成一个 32 位有符号整数（类似 C/C++ 中的 atoi 函数）。
    //
    //函数 myAtoi(string s) 的算法如下：
    //
    //读入字符串并丢弃无用的前导空格
    //检查下一个字符（假设还未到字符末尾）为正还是负号，读取该字符（如果有）。 确定最终结果是负数还是正数。 如果两者都不存在，则假定结果为正。
    //读入下一个字符，直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
    //将前面步骤读入的这些数字转换为整数（即，"123" -> 123， "0032" -> 32）。如果没有读入数字，则整数为 0 。必要时更改符号（从步骤 2 开始）。
    //如果整数数超过 32 位有符号整数范围 [−231,  231 − 1] ，需要截断这个整数，使其保持在这个范围内。具体来说，小于 −231 的整数应该被固定为 −231 ，大于 231 − 1 的整数应该被固定为 231 − 1 。
    //返回整数作为最终结果。
    public int myAtoi(String s) {
        if (s.length() == 0) {
            return 0;
        }
        char[] ch = s.toCharArray();
        int index = 0;
        int n = ch.length;
        int ret = 0;
        int sign = 1;
        while (index < n && ch[index] == ' ') {
            index++;
        }
        while (index < n && (ch[index] == '+' || ch[index] == '-')) {
            sign = ch[index++] == '-' ? -1 : 1;
        }
        while (index < n && ch[index] >= '0' && ch[index] <= '9') {
            int digit = ch[index] - '0';
            if (ret > (Integer.MAX_VALUE - digit) / 10) {
                return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }
            ret = ret * 10 + digit;
            index++;
        }
        return ret * sign;

    }

        public static void main(String[] args) {
            System.out.println(fastPow(9,3));
        }
    public static long fastPow(long x ,long y) {
        long ret = 1;
        while (y != 0) {
            if ((y & 1) == 1) {
                ret = ret * x;
            }
                x *= x;

            y >>=1;
        }
        return ret;
    }

    }

